package com.shph.validation.utils;

import com.shph.validation.Validator;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * 一些反射的工具方法
 */
public class ReflectUtils {
    /**
     * 得到 get 方法
     *
     * @param target    目标对象
     * @param fieldName 属性名称
     * @return
     * @throws NoSuchMethodException
     */
    public static Method getMethodByField(Object target, String fieldName) throws NoSuchMethodException {
        return target.getClass().getMethod("get" + firstLetterCapitalize(fieldName));
    }

    /**
     * 根据属性名称获取属性值（该对象的属性值必须实现 get 方法）
     *
     * @param target    目标对象
     * @param fieldName 属性名称
     * @return
     * @throws NoSuchMethodException
     * @throws InvocationTargetException
     * @throws IllegalAccessException
     */
    public static Object getFieldValue(Object target, String fieldName) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
        Method method = getMethodByField(target, fieldName);
        return method.invoke(target);
    }

    /**
     * 首字母大写
     *
     * @param value 首选对象
     * @return
     */
    public static String firstLetterCapitalize(String value) {
        if (Validator.isEmpty(value)) {
            return "";
        }
        return value.substring(0, 1).toUpperCase() + value.substring(1);
    }
}
